package ar.com.gestion.bo;

import java.util.List;

import ar.com.gestion.dao.FiadoDAO;
import ar.com.gestion.dao.PagosDAO;
import ar.com.gestion.dao.VentasDAO;
import ar.com.gestion.dominio.Cliente;
import ar.com.gestion.dominio.Pago;
import ar.com.gestion.dominio.Venta;

public class VentasBO {

	private VentasDAO ventasDAO;
	private PagosDAO pagosDAO;
	private FiadoDAO fiadoDAO;
	private ProductoBO productoBO;
	private UsuariosBO usuariosBO;

	public void venderCuotas(Venta venta) {

		int id_venta = ventasDAO.saveVenta(venta);
		venta.setId(id_venta);
		int id_pago = pagosDAO.savePago(venta.getPagos().get(0), venta.getId());

		productoBO.venderProducto(venta.getProductos());

		venta.setId(id_venta);

	}
	
	
	public void updateVentaFiado(Venta venta) {
		
		pagosDAO.savePago(venta.getPagos().get(venta.getPagos().size()-1), venta.getId());
		ventasDAO.actualizarPorcentajeVenta(venta);
		
	}

	
	
	public void venderFiado(Venta venta) {
		
		int id_venta = ventasDAO.saveVenta(venta);
		pagosDAO.savePago(venta.getPagos().get(0), id_venta);
		productoBO.venderProducto(venta.getProductos());
		
		
		
		
		
	}

	
	public void pagarCuota(Venta venta, int cuotasAPagar, float montoCuotas) {
	
		Pago pago =null;
		
		for (int i = 0; i < cuotasAPagar; i++) {
			pago =  new Pago();
			pago.setMonto(montoCuotas);
			venta.addPago(pago);
			
			pagosDAO.savePago(pago, venta.getId());
		}
		
		
		ventasDAO.actualizarVenta(venta);
		
	}
	
	
	
	public List<Venta> obtenerDeudores() {
		
		List<Venta> ventas = ventasDAO.getVentasNoFinalizadas();
		for (Venta venta : ventas) {
			Cliente cliente = usuariosBO.recuperarCliente(venta.getCliente().getIdCliente());
			venta.setCliente(cliente);
			List<Pago> pagos = pagosDAO.getPagosByVentaID(venta.getId());
			venta.setPagos(pagos);
		}
		
		
		return ventas;
	}
	public List<Venta> obtenerDeudoresFiados() {
		
		List<Venta> ventas = ventasDAO.getAllVentasFiado();
		for (Venta venta : ventas) {
			Cliente cliente = usuariosBO.recuperarCliente(venta.getCliente().getIdCliente());
			venta.setCliente(cliente);
			List<Pago> pagos = pagosDAO.getPagosByVentaID(venta.getId());
			venta.setPagos(pagos);
		}
		
		
		return ventas;
	}

	public VentasDAO getVentasDAO() {
		return ventasDAO;
	}

	public void setVentasDAO(VentasDAO ventasDAO) {
		this.ventasDAO = ventasDAO;
	}

	public PagosDAO getPagosDAO() {
		return pagosDAO;
	}

	public void setPagosDAO(PagosDAO pagosDAO) {
		this.pagosDAO = pagosDAO;
	}

	public FiadoDAO getFiadoDAO() {
		return fiadoDAO;
	}

	public void setFiadoDAO(FiadoDAO fiadoDAO) {
		this.fiadoDAO = fiadoDAO;
	}

	public ProductoBO getProductoBO() {
		return productoBO;
	}

	public void setProductoBO(ProductoBO productoBO) {
		this.productoBO = productoBO;
	}

	public UsuariosBO getUsuariosBO() {
		return usuariosBO;
	}

	public void setUsuariosBO(UsuariosBO usuariosBO) {
		this.usuariosBO = usuariosBO;
	}





	


	



}
